package com.example.stlink.utils.activityUtil;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.Gravity;
import android.view.MenuItem;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.viewpager2.widget.ViewPager2;

import com.example.stlink.R;
import com.example.stlink.configs.adapter.ViewPagerAdapter;
import com.example.stlink.utils.CommonUtils;
import com.google.android.material.badge.BadgeDrawable;
import com.google.android.material.bottomnavigation.BottomNavigationView;

import java.util.List;

public class MainActivityUtil {

    private Boolean isExit = false; // 定义一个变量，来标识是否退出
    private MenuItem menuItem; //
    private BottomNavigationView bottomNavigationView; //底部导航栏
    private BadgeDrawable badge; //设置班级列表消息的角标
    private ViewPager2 viewPager2; // 视图
    private Handler mHandler; // 3秒内连续点击两个退出键返回
    private AppCompatActivity appCompatActivity;

    public MainActivityUtil(){}

    public MainActivityUtil(AppCompatActivity appCompatActivity){
        this.appCompatActivity = appCompatActivity;
    }

    /**
     * 初始化页面
     */
    @SuppressLint("ResourceAsColor")
    public void initView(){

        //修改状态栏字体颜色
        CommonUtils.changeStatusBar(appCompatActivity);

        // 底部导航栏
        bottomNavigationView = appCompatActivity.findViewById(R.id.bottom_navigation_view);
        // 设置角标
        badge = bottomNavigationView.getOrCreateBadge(R.id.class_list);
        badge.setNumber(0);
        badge.setVisible(false);
        badge.setBadgeTextColor(R.color.black);
        // 视图翻页工具
        viewPager2 = appCompatActivity.findViewById(R.id.nav_host_fragment);
        // 消息延时处理，将退出标志设置未为false
        mHandler = new Handler(Looper.getMainLooper()) {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                isExit = false;
            }
        };
    }

    /**
     * 将碎片与ViewPager2进行绑定，并监听viewPager2的滑动
     */
    public void initPager(List<Fragment> list){

        // 设置底部导航栏的点击监听事件，未点击到点击状态触发
        bottomNavigationView.setOnItemSelectedListener(item -> {
            int itemId = item.getItemId();
            if (itemId == R.id.home) {// 主页被点击
                viewPager2.setCurrentItem(0);
                return true;
            }else if( itemId == R.id.class_list){ // 班级列表被点击
                viewPager2.setCurrentItem(1);
                return true;
            }else if( itemId == R.id.my_info){ //个人中心被点击
                viewPager2.setCurrentItem(2);
                return true;
            }else {
                return false;
            }
        });
        // 注册页面改变的回调函数
        viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {  //  声明页面切换后的回调函数
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }
            @Override
            public void onPageSelected(int position) { //根据滑动设置被选择的碎片
                if (menuItem != null) {
                    menuItem.setChecked(false);
                } else {
                    bottomNavigationView.getMenu().getItem(0).setChecked(false);
                }
                menuItem = bottomNavigationView.getMenu().getItem(position);
                menuItem.setChecked(true);
            }
            @Override
            public void onPageScrollStateChanged(int state) { }
        });
        setupViewPager(viewPager2, list);
    }


    /**
     * 将碎片与viewPager2进行绑定
     * @param viewPager2 碎片集中管理类
     * @param list 碎片列表
     */
    private void setupViewPager(ViewPager2 viewPager2, List<Fragment> list) {
        FragmentManager fragmentManager = appCompatActivity.getSupportFragmentManager();
        // 将创建的碎片列表加入适配器中
        ViewPagerAdapter adapter = new ViewPagerAdapter(fragmentManager, appCompatActivity.getLifecycle(), list);
        // viewPager2设置适配器
        viewPager2.setAdapter(adapter);
        //禁止自己滑动，解决嵌套的viewpager2能自由滑动

    }



    /**
     * 2、在exit方法中，会首先判断isExit的值，如果为false的话，则置为true，
     *  同时会弹出提示，并在3000毫秒（3秒）后发出一个消息，在Handler中将此值还原成false。
     *  如果在发送消息间隔的2秒内，再次按了BACK键，则再次执行exit方法，此时isExit的值已
     *  为true，则会执行退出的方法。
     */
    public void setExit(){
        if (!isExit) {
            isExit = true;
            Toast toast = Toast.makeText(appCompatActivity.getApplicationContext(),"再按一次退出程序",Toast.LENGTH_SHORT);
            toast.show();
            toast.setGravity(Gravity.CENTER, 0, 0);
            //利用handler延迟发送更改状态信息，3000==3
            mHandler.sendEmptyMessageDelayed(0, 3000);
        } else {
            //在后台运行程序，不退出程序，只返回桌面
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            appCompatActivity.startActivity(intent);
        }
    }

}